﻿using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
using System.Windows.Forms;
using ceTe.DynamicPDF.Rasterizer;


namespace CheckList
{
    class classKartyTechniczne
    {
        private string curentProgram;
        private string curentKomplet;
        private string curentElement;
        
        /// <summary>
        /// Jesli automatyczna sciezka nie odpowiada to mozna ja okreslic za pomoca tej funkcji
        /// </summary>
        /// <param name="OpisOkna"></param>
        /// <returns></returns>
        public string okreslSciezkeDlaKartTechnicznych(string OpisOkna)
        {
            FolderBrowser myBrowser = new FolderBrowser();
            myBrowser.Title = OpisOkna;
            myBrowser.Flags = BrowseFlags.BIF_NEWDIALOGSTYLE |
                              BrowseFlags.BIF_STATUSTEXT |
                              BrowseFlags.BIF_EDITBOX;
            DialogResult res = myBrowser.ShowDialog();
            string path = null;
            if (res == DialogResult.OK)
            {
                path = myBrowser.DirectoryPath;
            }
            return path;
        }

        public void sprawdzIstnienieFolderuKompletu()
        {
            string activeDir = classConfig.getConfSettingsForKey("kompletySciezka");

            // is folder exists?
            if (!System.IO.Directory.Exists(activeDir + curentKomplet)){            

                //Create a new subfolder under the current active folder
                string newPath = System.IO.Path.Combine(activeDir, curentKomplet);
                // Create the subfolder
                System.IO.Directory.CreateDirectory(newPath);
            }
        }

        public string wkazPlikPdfKartyTechnicznej()
        {
            OpenFileDialog openFileDialogCSV = new OpenFileDialog();
            openFileDialogCSV.InitialDirectory = Application.ExecutablePath.ToString();
            openFileDialogCSV.Filter = "PDF files (*.pdf)|*.pdf|All files (*.*)|*.*";
            openFileDialogCSV.FilterIndex = 1;
            openFileDialogCSV.RestoreDirectory = true;

            if (openFileDialogCSV.ShowDialog() == DialogResult.OK)
            {
                return openFileDialogCSV.FileName.ToString();
            }
            return null;
        }

        public string Program
        {
            set { this.curentProgram = value; }
        }

        public string Komplet
        {
            set { this.curentKomplet = value; }
        }

        public string Element
        {
            set { this.curentElement = value; }
        }

        public string DisplayElement
        {
            get { return this.curentElement; }
        }

        public DataSet ListaElementow()
        {

            DataSet ds = classConfig.getDSet("SELECT id_element, art_numer, element,'' AS 'plik_gif', '' AS plik_pdf, grupa_mat  FROM elementy WHERE "
                +"id_komplet = '" + curentKomplet + "' AND grupa_mat != 'AKCES' AND znacznik_korpus_mdf = 'KORP'", classConfig.sqlConnString);
            return ds;
        }

        public DataRow PoprawnoscListyKartTechnicznych()
        {

            DataRow dr = classConfig.getRow("SELECT *  FROM pop_rys_kom WHERE "
                + "Id_komplet = '" + curentKomplet + "'", classConfig.sqlConnString);
            return dr;
        }

        public void obslugaKolumnDataGrid( DataGridView dgvObj)
        {

            // ustawienie kolumn
            dgvObj.AutoGenerateColumns = false;

            if (dgvObj.ColumnCount == 0)
            {
                DataGridViewTextBoxColumn IDe = new DataGridViewTextBoxColumn();
                DataGridViewTextBoxColumn Numer = new DataGridViewTextBoxColumn();
                DataGridViewTextBoxColumn Nazwa = new DataGridViewTextBoxColumn();
                DataGridViewLinkColumn PlikGIF = new DataGridViewLinkColumn();
                DataGridViewLinkColumn PlikPDF = new DataGridViewLinkColumn();
                DataGridViewButtonColumn Wczytaj = new DataGridViewButtonColumn();
                DataGridViewButtonColumn Konwertuj = new DataGridViewButtonColumn();
                DataGridViewButtonColumn wstawPusty = new DataGridViewButtonColumn();
                DataGridViewTextBoxColumn grupaMaterialowa = new DataGridViewTextBoxColumn();

                IDe.DataPropertyName = "id_element";
                IDe.HeaderText = "Indeks";
                IDe.Width = 50;
                IDe.Visible = true;
                IDe.Name = "Indeks";                

                Numer.DataPropertyName = "art_numer";
                Numer.HeaderText = "Numer";
                Numer.Width = 60;
                Numer.Visible = true;
                Numer.Name = "Numer";

                Nazwa.DataPropertyName = "element";
                Nazwa.HeaderText = "Nazwa";
                Nazwa.Width = 150;
                Nazwa.Visible = true;
                Nazwa.Name = "Nazwa";

                PlikGIF.DataPropertyName = "plik_gif";
                PlikGIF.HeaderText = "Plik GIF";
                PlikGIF.Width = 120;
                PlikGIF.Visible = true;
                PlikGIF.Name = "plik_gif";

                PlikPDF.DataPropertyName = "plik_pdf";
                PlikPDF.HeaderText = "Plik PDF";
                PlikPDF.Width = 100;
                PlikPDF.Visible = true;
                PlikPDF.Name = "plik_pdf";

                Wczytaj.HeaderText = "";
                Wczytaj.Width = 25;
                Wczytaj.Visible = true;
                Wczytaj.Name = "Wczytaj";
                Wczytaj.Text = "...";                
                Wczytaj.UseColumnTextForButtonValue = true;

                Konwertuj.HeaderText = "";
                Konwertuj.Visible = true;
                Konwertuj.Name = "Konwertuj";
                Konwertuj.Text = "Konwertuj";
                Konwertuj.Width = 60;                
                Konwertuj.UseColumnTextForButtonValue = true;

                wstawPusty.HeaderText = "";
                wstawPusty.Visible = true;
                wstawPusty.Name = "wstawPusty";
                wstawPusty.Text = "wst.Pusty";
                wstawPusty.Width = 60;               
                wstawPusty.UseColumnTextForButtonValue = true;

                grupaMaterialowa.DataPropertyName = "grupa_mat";
                grupaMaterialowa.HeaderText = "Materiał";
                grupaMaterialowa.Width = 40;
                grupaMaterialowa.Visible = true;
                grupaMaterialowa.Name = "grupaMaterialowa";

                // kolumny z ktorych pobieram dane

                dgvObj.Columns.Add(IDe);
                dgvObj.Columns.Add(Numer);
                dgvObj.Columns.Add(Nazwa);
                dgvObj.Columns.Add(PlikGIF);
                dgvObj.Columns.Add(PlikPDF);
                dgvObj.Columns.Add(Wczytaj);
                dgvObj.Columns.Add(Konwertuj);
                dgvObj.Columns.Add(wstawPusty);
                dgvObj.Columns.Add(grupaMaterialowa); 
            }
        }

        public DataSet sprawdzPlikiGifDlaElementow(DataSet ds)
        {

            try
            {

                DataTable dtab = new DataTable();
                if (ds.Tables.IndexOf("ds") > -1)
                {
                    dtab = ds.Tables[0];
                    int r = 0;
                    foreach (DataRow row in dtab.Rows)
                    {

                        string ide = null;
                        string art = null;
                        string plikGIF = "Brak pliku";
                        foreach (DataColumn col in dtab.Columns)
                        {

                            if (col.ToString() == "id_element") ide = row[col.ToString()].ToString();
                            if (col.ToString() == "art_numer") art = row[col.ToString()].ToString();
                            if (ide != null && art != null)
                            {
                                plikGIF = this.sprawdzPlikGifDlaJednegoElementu(ide, art);
                                ds.Tables[0].Rows[r]["plik_gif"] = plikGIF;
                            }
                        }
                        r++;
                    }
                }

            }
            catch (Exception e) //Error
            {
               MessageBox.Show(e.Message, "Error - Sprawdzenie plików Gif ...", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            
            return ds;
        }

        /// <summary>
        /// Sprawdzenie czy lista kart technicznych jest kompletna
        /// </summary>
        /// <param name="ds"></param>
        /// <returns></returns>
        public string weryfikujKartyTechniczne(DataSet ds)
        {
            string weryfikacjaKartTechnicznych = "OK";
            try
            {

                DataTable dtab = new DataTable();
                if (ds.Tables.IndexOf("ds") > -1)
                {
                    dtab = ds.Tables[0];
                    int r = 0;
                    foreach (DataRow row in dtab.Rows)
                    {

                        string ide = null;
                        string art = null;

                        foreach (DataColumn col in dtab.Columns)
                        {

                            if (col.ToString() == "id_element") ide = row[col.ToString()].ToString();
                            if (col.ToString() == "art_numer") art = row[col.ToString()].ToString();
                            if (ide != null && art != null)
                            {
                                string wynikWeryf = this.sprawdzPlikGifDlaJednegoElementu(ide, art);
                                if (wynikWeryf == "brak pliku")
                                {
                                    weryfikacjaKartTechnicznych = "Błędna";
                                    break;
                                }
                            }
                        }
                        r++;
                        if (weryfikacjaKartTechnicznych == "Błędna") break;
                    }

                }
                
            }
            catch (Exception e) //Error
            {
                MessageBox.Show(e.Message, "Error - Sprawdzenie plików Gif ...", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return (weryfikacjaKartTechnicznych == "OK") ? weryfikacjaKartTechnicznych  : "Błędna"; 
        }


        public DataSet sprawdzPlikiPdfDlaElementow(DataSet ds, string sciezkaDoPDFow)
        {
            try
            {

                DataTable dtab = new DataTable();
                if (ds.Tables.IndexOf("ds") > -1)
                {
                    dtab = ds.Tables[0];
                    int r = 0;
                    foreach (DataRow row in dtab.Rows)
                    {

                        string art = null;
                        string plikPDF = null;
                        foreach (DataColumn col in dtab.Columns)
                        {
                            if (col.ToString() == "art_numer") art = row[col.ToString()].ToString();
                            if ( art != null)
                            {
                                plikPDF = this.sprawdzPlikPdfDlaJednegoElementu(art, sciezkaDoPDFow);
                                ds.Tables[0].Rows[r]["plik_pdf"] = plikPDF;
                            }
                        }
                        r++;
                    }
                }
            }
            catch (Exception e) //Error
            {
                MessageBox.Show(e.Message, "Error - Sprawdzenie plików Pdf ...", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return ds;
        }

        private string sprawdzPlikGifDlaJednegoElementu(string id_element, string art_numer)
        {
            //MessageBox.Show(curentKomplet.ToString() + ": " + id_element+ "/" + art_numer);
            string rootDir = classConfig.getConfSettingsForKey("kompletySciezka");

            if (File.Exists(rootDir + curentKomplet.ToString() + @"\" + id_element + "-1.gif"))
            {
                return rootDir + curentKomplet.ToString() + @"\" + id_element + "-1.gif";
            }
            else
            {
                return "brak pliku";
            }               
        }

        private string sprawdzPlikPdfDlaJednegoElementu(string art_numer, string PathToPDF)
        {
            //MessageBox.Show(curentKomplet.ToString() + ": " + id_element+ "/" + art_numer);

            if (File.Exists(PathToPDF + @"\" + art_numer + ".pdf"))
            {
                return PathToPDF + @"\" + art_numer + ".pdf";
            }
            else
            {
                return null;
            }
        }


        public void konwertujPlikPdfToGif(string filePDF, string fileGif)
        {
            PdfRasterizer rasterizer = new PdfRasterizer(filePDF);
            rasterizer.Draw(fileGif, ImageFormat.Gif, ImageSize.Dpi150);
        }


        public void zapiszWeryfikacjeKartTechnicznych(string id_komplet, string weryfikacja)
        {
            string new_id_pop_rys_kom_ = classConfig.getOne("SELECT top 1 id_pop_rys_kom FROM pop_rys_kom ORDER BY convert(integer, id_pop_rys_kom) desc", classConfig.sqlConnString);
            int new_id_pop_rys_kom = Convert.ToInt16(new_id_pop_rys_kom_);
            new_id_pop_rys_kom++;

            string id_pop_rys_kom = classConfig.getOne("SELECT top 1 id_pop_rys_kom FROM pop_rys_kom WHERE Id_komplet = '" + id_komplet+"'", classConfig.sqlConnString);
            if (id_pop_rys_kom != null)
            {
                string query = "UPDATE pop_rys_kom SET korp = '" + weryfikacja + "' WHERE id_pop_rys_kom = '" + id_pop_rys_kom + "'";
                classConfig.exec(query, classConfig.sqlConnString);
            }
            else
            {
                string query = "INSERT INTO pop_rys_kom (id_pop_rys_kom, Id_komplet, korp) "+
                    "VALUES ('" + new_id_pop_rys_kom + "','" + id_komplet + "','" + weryfikacja + "')";
                classConfig.exec(query, classConfig.sqlConnString);
            }
        }

    }
}
